OpenFeign হলো Spring Cloud-এর একটি ডিক্লারেটিভ HTTP ক্লায়েন্ট। এটি REST API-এর সাথে যোগাযোগ করার জন্য সহজ এবং কার্যকর সমাধান প্রদান করে। Feign ব্যবহার করে আপনি HTTP রিকোয়েস্ট তৈরি করতে পারেন একদম ডিক্লারেটিভ স্টাইলে, যেমন একটি ইন্টারফেস ডিফাইন করে।
OpenFeign-এর বৈশিষ্ট্য
- ডিক্লারেটিভ পদ্ধতি:
- HTTP রিকোয়েস্ট ম্যানুয়ালি কোড করার পরিবর্তে সহজ ডিক্লারেটিভ পদ্ধতিতে লেখা যায়।
- সহজ ইন্টিগ্রেশন:
- Spring Boot এবং Spring Cloud-এর সঙ্গে সহজ ইন্টিগ্রেশন।
- লোড ব্যালেন্সিং সমর্থন:
- Spring Cloud Load Balancer বা Eureka-এর মাধ্যমে লোড ব্যালেন্সিং সমর্থন করে।
- বিভিন্ন HTTP মেথড সমর্থন:
GET,POST,PUT,DELETE, ইত্যাদি সহজে ব্যবহার করা যায়।
OpenFeign সেটআপ এবং ব্যবহার
1. ডিপেনডেন্সি যোগ করা
আপনার pom.xml-এ OpenFeign এর ডিপেনডেন্সি যোগ করুন।
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2. Feign Client সক্রিয় করা
Feign Client ব্যবহার করতে @EnableFeignClients অ্যানোটেশনটি আপনার মেইন ক্লাসে যোগ করুন।
@SpringBootApplication
@EnableFeignClients
public class FeignClientApplication {
public static void main(String[] args) {
SpringApplication.run(FeignClientApplication.class, args);
}
}
3. Feign Client তৈরি করা
একটি ইন্টারফেস তৈরি করুন এবং HTTP মেথডের জন্য Spring MVC অ্যানোটেশন ব্যবহার করুন।
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(name = "jsonplaceholder", url = "https://jsonplaceholder.typicode.com")
public interface JsonPlaceholderClient {
@GetMapping("/posts/{id}")
String getPostById(@PathVariable("id") Long id);
}
ব্যাখ্যা:
@FeignClient: Feign-এর মাধ্যমে এই ইন্টারফেসটি HTTP রিকোয়েস্ট পরিচালনা করবে।name: Feign Client-এর একটি নাম।url: যে API এর সঙ্গে যোগাযোগ করতে হবে।@GetMapping: HTTP GET রিকোয়েস্ট নির্দেশ করে।@PathVariable: URL প্যারামিটার হিসেবে ID পাঠায়।
4. Feign Client ব্যবহার করা
একটি Spring Controller বা Service-এ Feign Client ইনজেক্ট করে ব্যবহার করুন।
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PostController {
private final JsonPlaceholderClient jsonPlaceholderClient;
public PostController(JsonPlaceholderClient jsonPlaceholderClient) {
this.jsonPlaceholderClient = jsonPlaceholderClient;
}
@GetMapping("/post/{id}")
public String getPostById(@PathVariable("id") Long id) {
return jsonPlaceholderClient.getPostById(id);
}
}
5. অ্যাপ্লিকেশন চালানো এবং API কল করা
Spring Boot অ্যাপ্লিকেশন চালিয়ে /post/{id} এপয়েন্টে কল করুন। উদাহরণ:
GET http://localhost:8080/post/1
OpenFeign-এর মাধ্যমে POST Request করা
OpenFeign দিয়ে POST রিকোয়েস্ট তৈরি করা যায় সহজেই। উদাহরণস্বরূপ:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = "jsonplaceholder", url = "https://jsonplaceholder.typicode.com")
public interface JsonPlaceholderClient {
@PostMapping("/posts")
String createPost(@RequestBody Post post);
}
class Post {
private String title;
private String body;
private Long userId;
// Getters and Setters
}
Controller-এ POST রিকোয়েস্ট কল:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PostController {
private final JsonPlaceholderClient jsonPlaceholderClient;
public PostController(JsonPlaceholderClient jsonPlaceholderClient) {
this.jsonPlaceholderClient = jsonPlaceholderClient;
}
@PostMapping("/create-post")
public String createPost(@RequestBody Post post) {
return jsonPlaceholderClient.createPost(post);
}
}
Feign Client কাস্টমাইজেশন
1. হেডার যোগ করা
আপনার রিকোয়েস্টে কাস্টম হেডার যোগ করতে @RequestHeader ব্যবহার করুন।
@FeignClient(name = "jsonplaceholder", url = "https://jsonplaceholder.typicode.com")
public interface JsonPlaceholderClient {
@GetMapping("/posts/{id}")
String getPostById(@PathVariable("id") Long id,
@RequestHeader("Authorization") String token);
}
2. ডিফল্ট কনফিগারেশন
Feign Client-এর জন্য ডিফল্ট টাইমআউট বা রিট্রাই কনফিগারেশন সেট করা যায়।
@Bean
public Request.Options requestOptions() {
return new Request.Options(5000, 10000); // Connect and Read timeout
}
উপসংহার
- OpenFeign হলো Spring Boot-এ HTTP রিকোয়েস্ট করার একটি সহজ এবং কার্যকর পদ্ধতি।
- এটি ডিক্লারেটিভ HTTP ক্লায়েন্ট পদ্ধতি ব্যবহার করে কোডকে আরও রিডেবল এবং মেইনটেইনেবল করে তোলে।
- Spring Boot এর মধ্যে Feign Client ব্যবহার করা নতুন মাইক্রোসার্ভিস আর্কিটেকচারের জন্য অত্যন্ত উপযোগী।
Read more